/****************************************************************************
* Copyright (c) 2008, j. montgomery, ATGi                                   *
* All rights reserved.                                                      *
*                                                                           *
* Redistribution and use in source and binary forms, with or without        *
* modification, are permitted provided that the following conditions        *
* are met:                                                                  *
*                                                                           *
* - Redistributions of source code must retain the above copyright          *
*   notice, this list of conditions and the following disclaimer.           *
*                                                                           *
* - Redistributions in binary form must reproduce the above                 *
*   copyright notice, this list of conditions and the following             *
*   disclaimer in the documentation and/or other materials provided         *
*   with the distribution.                                                  *
*                                                                           *
* - Neither the name of ATGi nor the names of its contributors may          *
*   be used to endorse or promote products derived from this software       *
*   without specific prior written permission.                              *
*                                                                           *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       *
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         *
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS         *
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE            *
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,       *
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES                  *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR        *
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)        *
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,       *
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)             *
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED       *
* OF THE POSSIBILITY OF SUCH DAMAGE.                                        *
*****************************************************************************
*/
using System;
using System.Collections;

namespace DnSmtp.Message
{
	public class MailMessageDictionary : DictionaryBase
	{
		public MailMessage this[object key]
		{
			get
			{
				return this.Dictionary[key] as MailMessage;
			}
			set
			{
				this.Dictionary[key] = value;
			}
		}

		public ICollection Keys 
		{
			get
			{
				return this.Dictionary.Keys;
			}
		}

		public ICollection Values
		{
			get
			{
				return this.Dictionary.Values;
			}
		}
	

		public MailMessageDictionary()
		{
		}

		
		public void Add(object key, MailMessage value)
		{
			this.Dictionary.Add(key, value);
		}

		public bool Contains(object key)
		{
			return this.Dictionary.Contains(key);
		}

		public void Remove(object key)
		{
			this.Dictionary.Remove(key);
		}


		protected override void OnValidate(object key, object value)
		{
			// Perform base validation, (non-null reference.)
			base.OnValidate (key, value);

			// Validate that the value is a mail message.
			if (!(value is MailMessage))
			{
				throw new ArgumentException(string.Format("Value must be of type '{0}'.", typeof(MailMessage).FullName), "value");
			}
		}
	}
}
